package com.rnkrsoft.suyan.config.server.config.dao;

import com.rnkrsoft.framework.orm.Pagination;
import com.rnkrsoft.framework.orm.jdbc.JdbcMapper;
import com.rnkrsoft.suyan.config.server.config.bo.CompareParamByMachineBO;
import com.rnkrsoft.suyan.config.server.config.bo.QueryParamInfoBO;
import com.rnkrsoft.suyan.config.server.config.bo.SelectParamByGavemBO;
import com.rnkrsoft.suyan.config.server.config.entity.ParamInfoEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by woate on 2018/6/17.
 */
public interface ParamInfoDAO extends JdbcMapper<ParamInfoEntity, String> {
    Pagination<QueryParamInfoBO> selectParamPage(Pagination<QueryParamInfoBO> pagination);

    /**
     * 根据来源机器和目标机器进行参数比较
     *
     * @param sourceMachineId 来源机器
     * @param targetMachineId 目标机器
     * @return 比较参数结果
     */
    List<CompareParamByMachineBO> compare(@Param("sourceMachineId") String sourceMachineId,
                                          @Param("targetMachineId") String targetMachineId);


    /**
     * 以GAVEM坐标查询参数
     *
     * @param groupId     组织编号
     * @param artifactId  组件编号
     * @param version     版本号
     * @param environment 环境名
     * @param machine     机器名
     * @param keys        参数名数组
     * @return
     */
    List<SelectParamByGavemBO> selectParamByGavem(@Param("groupId") String groupId,
                                                  @Param("artifactId") String artifactId,
                                                  @Param("version") String version,
                                                  @Param("environment") String environment,
                                                  @Param("machine") String machine,
                                                  @Param("keys") List<String> keys);

    ParamInfoEntity selectExtendParamByGavemp(@Param("projectId") String projectId,
                                              @Param("version") String version,
                                              @Param("environment") String environment,
                                              @Param("machine") String machine,
                                              @Param("paramName") String paramName);

    /**
     * 查询指定的继承参数的值
     *
     * @param projectId   项目编号
     * @param version     版本号
     * @param environment 环境名
     * @param machine     机器名
     * @return
     */
    List<ParamInfoEntity> selectExtendParamByGavem(@Param("projectId") String projectId,
                                                   @Param("version") String version,
                                                   @Param("environment") String environment,
                                                   @Param("machine") String machine);

    /**
     * 将指定项目编号的所有参数进行继承参数匹配
     *
     * @param projectId 项目编号
     * @return
     */
    int updateParam2ExtendsParam(@Param("projectId") String projectId);

    /**
     * 将指定项目编号的所有参数进行继承参数匹配
     *
     * @param projectId 项目编号
     * @return
     */
    int repairParams(@Param("projectId") String projectId,
                     @Param("version") String version,
                     @Param("environment") String environment,
                     @Param("machine") String machine);

    /**
     * 查询指定项目，版本，环境，机器 的所有参数
     *
     * @param projectId   项目编号
     * @param version     版本号
     * @param environment 环境名
     * @param machine     机器名
     * @return
     */
    List<ParamInfoEntity> selectAllParams(@Param("projectId") String projectId,
                                          @Param("version") String version,
                                          @Param("environment") String environment,
                                          @Param("machine") String machine);

    /**
     * 查询指定项目，版本，环境，机器 的所有参数
     *
     * @param groupId     组织编号
     * @param artifactId  组件编号
     * @param version     版本号
     * @param environment 环境名
     * @param machine     机器名
     * @return
     */
    List<ParamInfoEntity> selectAllParamsByGavem(@Param("groupId") String groupId,
                                                 @Param("artifactId") String artifactId,
                                                 @Param("version") String version,
                                                 @Param("environment") String environment,
                                                 @Param("machine") String machine);
}
